#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

const int N=2e5;
string s;
int cnt=0;
vector<int> adj[N];

string dfs(int u,int fa){
    if(adj[u].size()==1){
        string s0="";
        s0=s0+s[u];
        return s0;
    }
    string res="";
    res=res+s[fa];
    for(int x:adj[u]){
        if(x==fa)continue;
        res+=dfs(x,u);
    }
    int r=0,g=0,b=0;
    for(char c:res){
        if(c=='R')r++;
        else if(c=='G')g++;
        else if(c=='B')b++;
    }
    cout<<"i:"<<r<<' '<<g<<' '<<b<<'\n';
    if((s[u]=='R'&&r==0)||(s[u]=='G'&&g==0)||(s[u]=='B'&&b==0)){
        cnt++;
        string ret="";
        if(r)ret+="R";
        if(g)ret+="G";
        if(b)ret+="B";
        return ret;
    }else{
        string ret="";
        if(r||s[u]=='R')ret+="R";
        if(g||s[u]=='G')ret+="G";
        if(b||s[u]=='B')ret+="B";
        return ret;
    }
}

void solve(){
    int n;
    cin>>n;
    cin>>s;
    s="0"+s;
    int root=0,mxru=0;
    vector<int> ru(n+1,0);
    for(int i=1;i<n;i++){
        int u,v;
        cin>>u>>v;
        adj[u].push_back(v);
        adj[v].push_back(u);
        ru[u]++,ru[v]++;
        if(ru[u]>mxru){
            mxru=ru[u];
            root=u;
        }if(ru[v]>mxru){
            mxru=ru[v];
            root=v;
        }
    }
    cout<<root<<'\n';
    dfs(root,0);
    cout<<cnt;
}

int main(){
    // ios::sync_with_stdio(0);
    // cin.tie(0),cout.tie(0);
    int _=1;
    //cin>>_;
    while(_--){
        solve();
    }
    return 0;
}